//
//  HZEmotionVM.swift
//  weibo002
//
//  Created by 黑眼圈 on 16/4/27.
//  Copyright © 2016年 heiyan. All rights reserved.
//

import UIKit

class HZEmotionVM: NSObject {
    
    
    //单例
    static let sharedEmotion:HZEmotionVM = HZEmotionVM()
    
    
    //浪小花表情
    lazy var lxhData:[HZEmotionModel] = {
        
       return self.giveImgData("lxh/info.plist")
        
    }()
    
    
    // emoji 表情
    lazy var emojiData:[HZEmotionModel] = {
        
        return self.giveImgData("emoji/info.plist")
        
    }()

    
    //默认表情
    lazy var defaultData:[HZEmotionModel] = {
        
        return self.giveImgData("default/info.plist")
        
    }()
    
    
    //归档的沙盒路径
    private lazy var path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString) .stringByAppendingPathComponent("recentData.archiver")
    
    //常用表情
    lazy var recentData: [HZEmotionModel] = {
        
       //如果能从沙盒里以反归档的形式取出来
        if let result = NSKeyedUnarchiver.unarchiveObjectWithFile(self.path) as?[HZEmotionModel]{
            return result
        }else {
            return [HZEmotionModel]()
        }
        
        
    }()

    

    lazy var allEmotion:[[[HZEmotionModel]]] = {
        
       return [
        
            [self.recentData],
            self.getTwoArray(self.defaultData),
            self.getTwoArray(self.emojiData),
            self.getTwoArray(self.lxhData),
        ]
    }()
    
    
    
    //通过表情字符串找到对应的表情模型
    func emotionWithChs(chs:String) -> HZEmotionModel? {
        
        //遍历默认表情
        for value in defaultData {
            
            if value.chs == chs {
                return value
            }
        }
        
        /// 遍历浪小花表情
        for value in lxhData {
            if value.chs == chs {
                return value
            }
        }

        //都没有就返回空
        return nil
        
    }
    

    //保存最近表情到沙盒里去
    func saveImgData(model:HZEmotionModel) {
        
        var recent = allEmotion[0][0]
        
        //取到重复的表情的数组
        let repeatEmotion = recent.filter { (value) -> Bool in
            
            //如果遍历取值取到了与点击的模型的类型相同就比较
            if value.type == model.type {
                
                //如果是 emoji 表情相同
                if value.type == "1" {
                    
                    // 返回重复的 code
                    return value.code == model.code
                }else{
                    
                    //如果是图片表情相同
                    //返回 chs
                    return value.chs == model.chs
                    
                }
                
            }else{
                
                //如果都不相同
                return false
                
                
            }
            
        }
        
        //从全部数组中移除上步获取的重复的元素
        for value in repeatEmotion {
            
            //如果有这个重复元素
            if let index = recent.indexOf(value) {
                
                //按照获取的下标移除
                recent.removeAtIndex(index)
            }
       
        }
        
        //最后将传进来的表情保存到最近表情数组中的第一个位置
        recent.insert(model, atIndex: 0)
        
        //如果超过20个就逐个移除,最多只能有20个
        if recent.count > 20 {
            //移除最后一个
            recent.removeLast()
        }
        
        //最后把值赋还给三维数组中***
        allEmotion[0][0] = recent
        
        //以归档的形式保存到沙盒中
        NSKeyedArchiver.archiveRootObject(recent, toFile: path)
        
    }
    
    
    // MARK: -  切割成二维数组
    func getTwoArray(array:[HZEmotionModel]) -> [[HZEmotionModel]]{
        
        //定义一个二维数值
        var imgArray:[[HZEmotionModel]] = [[HZEmotionModel]]()
        
        let cou = (array.count - 1)/20+1
        
        for i in 0..<cou {
            
            // 从哪儿开始截取
            let loc = 20 * i
            // 截取的长度
            var len = 20
            
            // 判断是否越界
            if loc + len > array.count {
                len = array.count - loc
            }
            
            
          imgArray.append((array as NSArray).subarrayWithRange(NSRange(location: loc, length: len)) as! [HZEmotionModel])
        }
       
       return imgArray 
    }
    
    
    // MARK: -  获取文件的 bundle
    func getBundle() -> NSBundle{
        
        //获取 bundle 的路径
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)
        
        //获取bundle
        let bundle = NSBundle(path: path!)

        return bundle!
    }
    
    
    // MARK: -  单个的字典模型
    private func giveImgData(name:String)->[HZEmotionModel]{
        
        
        //获取文件
        let pathArr = getBundle().pathForResource(name, ofType: nil)
        
        let arr = NSArray(contentsOfFile: pathArr!)
        
        //定义可变数组来接收
        var arrM = [HZEmotionModel]()
        
        //遍历来字典转模型
        for dict in arr! {
            
            let emotionModel = HZEmotionModel(dict: dict as! [String:AnyObject])
            
            //字符串删除最后一个\后面的字符
            emotionModel.pathString = (name as NSString).stringByDeletingLastPathComponent
            
            arrM.append(emotionModel)
        }

        return arrM
        
    }
    
    
    
    
    
    

}
